//
//  ClosureVC.swift
//  ReviewSwift
//
//  Created by ladystyle100 on 2017/8/25.
//  Copyright © 2017年 WangXQ. All rights reserved.
//

import UIKit

/** 别名闭包(Closure)
 *  修饰词 闭包名 = 参数 -> 返回值
 */
typealias Closure = (Int, Int) -> Int

class ClosureVC: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.white
        /** 闭包和函数 闭包 ==> 函数
         *  闭包就是函数, 函数就是闭包
         *
         *  情景: OneVC跳到TwoVC, Two点击btn, 回调给OneVC
         *  1、先typealias一个函数格式(参数和返回值)
         *  2、然后OneVC跳转到TwoVC, 同时TwoVC有一个函数属性, OneVC在这边实现它
         *  3、TwoVC在点击btn的时候调用这个函数属性, 这时候OneVC那边就会调用这个函数, 这个回调就完成了!
         *  OK, 先捋一下思路, 3步, 声明函数格式, 实现函数, 调用函数
         *  这就是函数就是闭包, 闭包就是函数, 原理虽然不知道, 但这是确实的
         *  闭包就是一种另类的函数罢了
         */
        
        /** 以下就来做个VC回调小实验 */
        let btn = UIButton.init(frame: CGRect.init(x: 0, y: 0, width: self.view.bounds.width, height: 44))
        btn.center = self.view.center
        btn.backgroundColor = UIColor.orange
        btn.setTitle("小测试", for: .normal)
        btn.addTarget(self, action: #selector(responds(_:)), for: .touchUpInside)
        self.view.addSubview(btn)
        
        
    }
    
    @objc private func responds(_ sender: UIButton) {
        let vc = ClosureOneVC()
        self.navigationController?.pushViewController(vc, animated: true)
    }
    
    private func test() {
        /** 闭包写法
         *  { (参数名) -> 返回值 in code }
         */
        self.one({ (a, b) -> Int in
            return a + b
        }, a: 1)
        
        // 如没有参数和返回值, { code }
        self.two { }
        
        // 这里要求是填一个闭包进去, 但是我写了一个函数, 和闭包一样的格式, 所以就能代入进去
        self.one(self.find(_:b:), a: 1)
    }
    
    private func find(_ a: Int, b: Int) -> Int {
        return a + b
    }
    
    private func one(_ closure: Closure, a: Int) {
        print(a + closure(1, 2))
    }
    
    private func two(_ closure: () -> Void) {
        
    }
    
    deinit {
        print("ClosureVC dealloc")
    }
    
}














